package main

import "fmt"

// 为练习 7.3 写一个新的版本，主函数调用一个使用序列个数作为参数的函数，该函数返回一个大小为序列个数的 Fibonacci 切片。

func fibSlice(n int) (res []uint64) {
	if n < 0 {
		n = 1
	}
	res = make([]uint64, n)
	f := func() func() uint64 {
		var a, b uint64
		a, b = 1, 1
		return func() uint64 {
			a, b = b, a+b
			return b
		}
	}()
	for i := 0; i < n; i++ {
		res[i] = f()
	}
	return
}

func main() {
	fmt.Println("20 fibonacci number slice: ")
	fmt.Println(fibSlice(20))
}
